<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<!-- $Id: FAQ.html,v 1.10 2000/03/13 15:01:50 kmacleod Exp $ -->
<html>
  <head>

    <title>Scarab: Frequently Asked Questions</title>

    <META NAME="DC.Title" CONTENT="Scarab: Frequently Asked Questions">
    <META NAME="DC.Creator" CONTENT="The Casbah Project">
    <META NAME="DC.Creator.Address" CONTENT="devel@casbah.org">
    <META NAME="DC.Subject" CONTENT="open source communications framework, distributed computing, distributed objects, remote, rpc, xml, scripting, linux, unix, casbah, free, frequently asked questions, faq, corba, xml-rpc, dcom">
    <META NAME="DC.Publisher" CONTENT="The Casbah Project">
    <META NAME="DC.Type" CONTENT="Text.Homepage.Organizational">
    <META NAME="DC.Format" CONTENT="text/html">
    <META NAME="DC.Identifier" CONTENT="http://casbah.org/">

    <link rel="stylesheet" href="http://casbah.org/new_casbah.css" type="text/css" media="screen">

  </head>

  <body>

  <table bgcolor="#d2b48c" border="0" cellpadding="4"
   cellspacing="1" width="90%" class="navbar">
    <tr>
      <td>
        <font face="Verdana, Lucida Sans, Arial, Helvetica,
	             Geneva, sans-serif">
	   <strong>Scarab:</strong> Frequently Asked Questions
        </font>
      </td>
    </tr>
  </table>

<h2>1) General Questions about Scarab</h2>
<h3>1.1) What is Scarab?</h3>

<p>Scarab is a modular set of specifications describing protocols,
 formats, and interfaces for writing distributed applications, with an
 emphasis on low-end and lightweight implementations.  Users can
 combine Scarab module implementations to build a messaging system to
 fit their needs, scaling from very simple messaging or data transfer
 all the way up to where CORBA can take over.  Scarab specifications
 include support for such areas as distributed objects, remote
 procedure calls, XML messages, TCP transport, and HTTP transport.</p>

<h3>1.2) Why was Scarab developed?  Why not just use CORBA?</h3>

<p>The Casbah Project started developing Scarab to serve as the
communications component of the Casbah application server. The
decision was made to develop Scarab, in favor of using CORBA, because, at
the time, CORBA wasn't generally available in the dynamic, high-level
languages or on some of the platforms that The Casbah Project was
targetting. In addition, because Casbah is an Open Source project, it
needed an Open Source CORBA implementation, while an Open Source CORBA
was hard to come by at the time.<p>

<p>Alternatives were evaluated but none combined enough of the
features that were required for Casbah.</p>

<h3>1.3) What languages does Scarab support?</h3>

<p>Scarab has features that allow it to support features specific to
individual languages while still able to communicate to others.
Scarab currently has implementations in Java, Python, Perl, and C.
But Scarab can be implemented, and would be helpful, in any number of
other languages like Smalltalk, TCL, Objective C, C++, Common Lisp,
Scheme, Erlang, EcmaScript, PHP, etc.</p>

<h3>1.4) Why is Scarab continuing to be developed?</h3>

<p>The state of CORBA, particularly Open Source implementations, has
changed since Scarab development was begun.  There are now more
language bindings, more platforms with CORBA support, and even some
support of dynamic languages within CORBA, but CORBA continues to be
out of the reach of many people for many of the same reasons we
initially started Scarab.  Scarab has turned out to be a fairly simple
protocol to implement while at the same time providing a lot of
flexibility and room to scale.</p>

<h3>1.5) Is Scarab difficult to use?</h3>

<p>No.  In most cases Scarab is as simple to use as the objects or
procedures in the languages you already use.  With Scarab, you create
an object or open a connection to a server and from then on you treat
that object just as you would any other object.  Keep in mind that
network errors can and do happen and that your code has to be able to
handle those errors.</p>

<h3>1.6) Is Scarab difficult to implement?</h3>

<p>No.  Creating basic clients or servers can often be done anywhere
from an afternoon to a few days depending on how many Scarab features
you wish to use.  Creating richer implementations can take a few
weeks.  We want to develop guides that will help implementors design
their code and provide a development path that allows the developer to
add additional features as they need them.</p>

<h3>1.7) What are the protocol layers in Scarab?</h3>

<p>A complete Scarab implementation has all the layers below.  Scarab can
also be implemented in stages, see the next question.  In each layer,
some of the implementations are listed, implementations marked with an
asterisk (*) are planned.

<pre>
    Application       (your application here!)
    Connection        Connection
    Request encoding  LDO-REO, SOAP*, XML-RPC*
    Marshaling        LDO-Marshal, SOAP*
    Serialization     LDO-XML, LDO-Binary, SOAP*, XML-RPC*, WDDX*
    Transport         TCP/IP, HTTP*, SMTP*
</pre>

<h2>2) How does Scarab differ from ...</h2>

<h3>2.1) CORBA?</h3>

<ul>
  <li>Scarab is much simpler to implement
  <li>CORBA has a very strict data model that language bindings must
  conform to; Scarab has a loose data model that requires programs to be
  more aware of the types of data being passed
  <li>Components of Scarab can be reused in other protocols or
  frameworks
</ul>

<h3>2.2) DCOM?</h3>

<p>NEED TEXT HERE</p>

<h3>2.3) HTTP-NG?</h3>

<p>Scarab is intended to fulfill many of the same goals stated for
HTTP-NG.  HTTP-NG is very similar to CORBA.  Scarab intends to borrows
several features from HTTP-NG, such as distributed garbage collection
and multiplexing protocol.</p>

<h3>2.4) Java RMI, Python's PyRPC, Perl's RPC::pServer and
RPC::pClient, and other language-specific protocols?</h3>

<p>These protocols are tied very closely to their respective
languages, Scarab is not tied to any particular language.  Scarab was
inspired by Apple's (nee NeXT's) Portable Distributed Objects (PDO)
and Python's pickle.py.</p>

<h3>2.5) SOAP and XML-RPC?</h3>

<p>SOAP and XML-RPC are protocols.  Scarab supports SOAP and XML-RPC.
Scarab extends SOAP and XML-RPC to support multiple transports,
multiple messages per session, and other features.</p>
		
<h2>3) Scarab Components</h2>

<h3>3.1) Don't LDO-XML and LDO-Binary serialization need more data
types?</h3>

<p>Scarab's XML and binary reference serializations were designed with
the assumption that we don't know what datatypes you really need.
Rather than define a small set of datatypes that may or may not fit
your needs, we've used some of the most basic data types available and
then supported a ``type'' attribute that lets you declare a specific
type.  LDO-Types defines common values for type attributes supported
by Scarab applications.  If it's your application that is used for
both client and server you can also define your own data types.
Scarab can also use other serialization formats that provide more
specific data types.</p>

<h3>3.2) What is an ``atom''?  Why did you pick ``atom''?</h3>

<p>An atom is a simple, basic data type like a number, a string, or a
date, in contrast to a complex, compound, or aggregate data type like
a list, dictionary, record, or structure.</p>

<p>``atom'' or ``atomic'' is the term most commonly used by designers
if and when they refer to a value or object that is not composed of or
an aggregate of other values or objects.  Many descriptions of
computer languages, protocols, or formats don't distinguish between
simple or complex objects or don't provide a specific term for
non-aggregate types (they simply call them ``objects'', for example).
The term ``scalar'' is a close second to ``atom'' in terms of common
usage.</p>

<p>Alternatives included ``value'', ``data'', ``datum'', ``scalar'',
and ``primitive''.  ``value'', ``data'', and ``datum'' all seemed
wrong because lists and dicts are also values, data, or datum.
``scalar'' seems too closely tied to numeric or quantity values.
``primitive'' is often associated with implementation in a lower-level
language (like C or assembler).</p>

  </body>
</html>
